package config

import "github.com/zeromicro/go-zero/zrpc"

type Config struct {
	zrpc.RpcServerConf
	Nacos *NacosConfig
	Mysql *MysqlConfig
	Redis *RedisConfig
}

type NacosConfig struct {
	Addr                 string `json:"addr"`
	DataId               string `json:"dataId"`
	ContextPath          string `json:"contextPath"`
	Port                 uint64 `json:"port" `
	Scheme               string `json:"scheme" `
	Username             string `json:"username" `
	Password             string `json:"password" `
	NamespaceId          string `json:"namespaceId" `
	Group                string `json:"group"`
	TimeoutMs            uint64 `json:"timeoutMs" `
	AppName              string `json:"appName" `
	CacheDir             string `json:"cacheDir" `
	LogDir               string `json:"logDir" `
	LogLevel             string `json:"logLevel" `
	UpdateThreadNum      int    `json:"updateThreadNum" `
	NotLoadCacheAtStart  bool   `json:"notLoadCacheAtStart" `
	UpdateCacheWhenEmpty bool   `json:"updateCacheWhenEmpty"`
}

type MysqlConfig struct {
	Host            string `json:"host" yaml:"host"`
	Port            int    `json:"port" yaml:"port"`
	Name            string `json:"name" yaml:"name"`
	Password        string `json:"password" yaml:"password"`
	DB              string `json:"db" yaml:"db"`
	ConnMaxLifetime int32  `json:"connMaxLifetime" yaml:"connMaxLifetime"`
	ConnMaxIdleTime int32  `json:"connMaxIdleTime" yaml:"connMaxIdleTime"`
	MaxIdleConn     int    `json:"maxIdleConn" yaml:"maxIdleConn"`
	MaxOpen         int    `json:"maxOpen" yaml:"maxOpen"`
	PrintSqlLog     string `json:"printSqlLog" yaml:"printSqlLog"`
	SlowSqlTime     int    `json:"slowSqlTime" yaml:"  slowSqlTime"`
}

type RedisConfig struct {
	Host         string `json:"host" yaml:"host"`
	Port         int    `json:"port" yaml:"port"`
	Password     string `json:"password" yaml:"password"`
	DB           int    `json:"db" yaml:"db"`
	MinIdleConns int    `json:"minIdleConns"`
	ReadTimeout  int    `json:"readTimeout"`
	WriteTimeout int    `json:"writeTimeout"`
	PoolSize     int    `json:"poolSize"`
	IdleTimeout  int    `json:"idleTimeout"`
	MaxRetries   int    `json:"maxRetries"`
}
